# pandas
import pandas as pd

# 根据字典创建dataframe
data = {'name': ['Tom', 'Nick', 'John', 'Tom'], 'age': [20, 21, 19, 20]}

# 根据字典创建dataframe
df = pd.DataFrame(data)

# 输出dataframe
print(df)

# 根据列表创建df
data = [['Tom', 20], ['Nick', 21], ['John', 19], ['Tom', 20]]

# 根据列表创建df
df = pd.DataFrame(data, columns=['name', 'age'])

# 输出dataframe
print(df)

# 根据excel读取
df = pd.read_excel(r'D:\python-ml-learn\实验2boss数据\aa.xlsx')

# 输出dataframe
print(df.head(10))

# 输出后面几行
print(df.tail(10))

# 输出基本信息
print(df.info())

# 输出统计信息
print(df.describe())

#  输出薪水列
print(df[['薪水', '关键词']])

# loc函数获取薪水
print(df.loc[0:10, '薪水'])

# iloc函数获取薪水
print(df.iloc[0:10, 6:8])


# 根据字典创建dataframe
data = {'name': ['Tom', 'Nick', 'John', 'Tom'], 'age': [20, 21, 19, 20]}

# 根据字典创建dataframe
df1 = pd.DataFrame(data)
"""
# 修改数据
df1.loc[:, 'age'] += 10000
# 定义一个函数fun0，参数为x  函数式编程
def fun0(x):
    # 返回x加上10000的结果
    return x + 10000
df1 = df1.loc[:, 'age'].apply(fun0)
print(df1)
"""

# 新增列
df1['sex'] = ['男', '女', '男', '男']
print(df1.info())
print(df1)

# 删除列
# df1 = df1.drop('sex', axis=1)
df1.drop(columns='sex', inplace=True)
print(df1.info())

# 删除行
# df1 = df1.drop(0)
# print(df1)
# 删除多行
# df1 = df1.drop([1, 2])
print(df1)

# 删除重复行
df1 = df1.drop_duplicates()
print(df1)

# 删除空值
df1.loc[3] = [None, 11]
print(df1)
# 删除空值行
df1.dropna(inplace=True)
print(df1)

df1.loc[3] = [None, 11]
print(df1)
df1.fillna('XX', inplace=True)
print(df1)

# 替换值
df1['name'].replace('Tom', 'Tom1', inplace=True)
print(df1)

# 排序
# ascending=True 升序 False 降序
df1.sort_values(by='age', ascending=True, inplace=True)
print(df1)

# 创建df, 城市、薪水、岗位
data = {'城市': ['北京', '上海', '广州', '深圳', '北京', '上海', '广州', '深圳'],
        '薪水': ['10k', '20k', '30k', '40k', '50k', '60k', '70k', '80k'],
        '岗位': ['Java', 'Python', 'C++', 'C#', 'Java', 'Python', 'C++', 'C#']}

df2 = pd.DataFrame(data)
print(df2)
# 按城市分组，求工资的平均值mean
df2['薪水'] = df2['薪水'].apply(lambda x: float(x[:-1])).astype(float)
df2 = df2.groupby('城市')['薪水'].mean()
print(df2)
import numpy as np
# 创建df, 城市、薪水、岗位
data = {'城市': ['北京', '上海', '广州', '深圳', '北京', '上海', '广州', '深圳'],
        '薪水': ['10k', '20k', '30k', '40k', '50k', '60k', '70k', '80k'],
        '岗位': ['Java', 'Python', 'C++', 'C#', 'Java', 'Python', 'C++', 'C#']}

df2 = pd.DataFrame(data)
# 数据透视表
# values: 要聚合的列
# index: 分组的列
# aggfunc: 聚合函数
# np.mean: 平均值
df2['薪水'] = df2['薪水'].apply(lambda x: float(x[:-1])).astype(float)
df2 = pd.pivot_table(df2, values='薪水', index='城市', aggfunc=np.mean)
print(df2)

# dataframe合并  join
df3 = pd.DataFrame({'城市': ['北京', '上海', '广州', '深圳', '沈阳'],
                    '薪水': [10, 20, 30, 40, 10]})
df4 = pd.DataFrame({'城市': ['北京', '上海', '广州', '深圳',  '大连'],
                    '岗位': ['Java', 'Python', 'C++', 'C#', 'GO']})
print(df3)
print(df4)  
print(pd.merge(df3, df4, on='城市', how='inner'))

# dataframe上下合并concat
print(pd.concat([df3, df4], axis=0))
print("------------------")
# 条件筛选
df1 = df4[df4['城市'] == '北京']
print(df1.head(10))
# 薪水大于10的
df1 = df3[df3['薪水'] > 10]
print(df1.head(10))
